#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>

void ChildRun()
{
  int *p=NULL;
  int cnt=5;
  
  while(1)
  //while(cnt)
  {
    printf("i am child process,pid:%d,ppid:%d,cnt:%d\n",getpid(),getppid(),cnt);
    sleep(1);
    cnt--;
    *p=100;
  }
}


int main()
{
  printf("i am father,pid:%d,ppid:%d\n",getpid(),getppid());

  pid_t id=fork();
  if(id==0)
  {
    //child
    ChildRun();
    printf("child quit ...\n");
    exit(1);

  }
  else{
    printf("wait failed!\n");

  }
  //father
  sleep(7); 
 // pid_t rid=wait(NULL);
  //pid_t rid=waitpid(-1,NULL,0);
  
  //pid_t rid=waitpid(id+1,NULL,0);
  int status=0;
  pid_t rid=waitpid(id,&status,0);
  if(rid>0)
  {
    printf("wait success,rid:%d\n",rid);
  }
  sleep(3);
  printf("father quit,status:%d,child quit code:%d,child quit signal:%d\n",status,(status>>8)&0xFF,status&0x7F);

}




//int main()
//{
//  printf("hello 111\n");
//  sleep(3);
//
// // exit(3);
//
//  _exit(3);
//}







//自定义枚举常量
//enum
//{
//  Success=0,
//  Div_Zero,
//  Mod_Zero,
//};
//
//
//int exit_code=Success;
//
//const char *CodeToErrString(int code)
//{
//  switch(code)
//  {
//    case Success:
//      return "Success";
//    case Div_Zero:
//      return "div zero!";
//    case Mod_Zero:
//      return "mod zeroo!";
//    default:
//      return "unknow error!";
//  }
//}
//
//int Div(int x, int y)
//{
// if(0==y)
// {
//   exit_code=Div_Zero;
//   return -1;
//
// }
// else
// {
//     // return x/y;
//    // exit(13);
//
//   _exit(31);
//  }
//}
//
//int main()
//{
////  int *p=NULL;
////
////
////
////  while(1)
////  {
////    printf("i am a process ,pid:%d\n",getpid());
////    sleep(1);
////    exit(123);
////    
//    //*p=100;//野指针
// // }
//
//
//
//
//
//
//   int result=Div(10,100);
//   printf("result:%d [%s]\n",result,CodeToErrString(exit_code));
//  // _exit(31);
//// 
//// result=Div(10,0);
//// printf("result:%d [%s]\n",result,CodeToErrString(exit_code));
//// 
//// return exit_code;
//
//
// // int errcode;
// // for(errcode=0;errcode<=255;errcode++)
// // {
// //   printf("%d:%s\n",errcode,strerror(errcode));
//
// // }
// // printf("i am process,pid:%d,ppid:%d\n ",getpid(),getppid());
//  sleep(2);
//   
//  return 0;
//}
